home *** CD-ROM | disk | FTP | other *** search
/ Run Magazine ReRun 1989 Special Issue / rerun-1989-special-issue.d64 / irq source#4 < prev    next >
Text File  |  2022-09-20  |  3KB  |  107 lines

  1. *=$C000
  2. ; ****ALARM CLOCK****
  3. ; TOD CLOCK ALARM DEMO
  4. ;
  5.       SEI                ; Set Interrupt Disable Flag
  6.        LDA #<NEWIRQ      ; Change RAM IRQ Vector
  7.       STA $0314         
  8.       LDA #>NEWIRQ
  9.       STA $0315
  10.       CLI                ; Clear Interrupt Disable Flag
  11.       RTS 
  12. NEWIRQ
  13.       BIT $DC0B           ; Test AM/PM flag
  14.       BMI PM              ; If not PM...
  15.       LDA #$81            ; Get a reverse "A"
  16.       BNE APFLAG          ; Jump ahead
  17. PM
  18.       LDA #$90            ; Get a reverse "P"
  19. APFLAG
  20.       STA $0427           ; Put character in upper left corner
  21.       LDA $DC0B           ; Get first digit of HOURS
  22.       AND #$10            ; 
  23.       BEQ HOUR0           ; Check if it is "0"
  24.       LDA #$B1            ; Get a reverse "1"
  25.       BNE D1H             ; Jump ahead
  26. HOUR0
  27.       LDA #$B0            ; Get a reverse "0"
  28. D1H
  29.       STA $041D           ; Put up first digit on screen
  30.       LDA $DC0B           ; Get second digit of HOURS
  31.       AND #$0F            ; Mask out bits 4-7
  32.       ORA #$B0            ; Add on #$B0 to get reverse number
  33.       STA $041E           ; Put up second digit
  34.       LDA #$BA            ; Get a reverse ":"
  35.       STA $041F           ; Put on screen
  36.       LDA $DC0A           ; Get first digit of MINUTES
  37.       AND #$70            ; Save bits 4-6
  38.       LSR                 ; Shift right 4 bits
  39.       LSR 
  40.       LSR 
  41.       LSR 
  42.       ORA #$B0            ; Get reverse character
  43.       STA $0420
  44.       LDA $DC0A           ; get second digit of MINUTES
  45.       AND #$0F
  46.       ORA #$B0
  47.       STA $0421
  48.       LDA #$BA
  49.       STA $0422
  50.       LDA $DC09           ; Do the same for SECONDS
  51.       AND #$70
  52.       LSR 
  53.       LSR 
  54.       LSR 
  55.       LSR 
  56.       ORA #$B0
  57.       STA $0423
  58.       LDA $DC09
  59.       AND #$0F
  60.       ORA #$B0
  61.       STA $0424
  62.       LDA #$AE            ; Get a reverse "."
  63.       STA $0425           ; Put on the screen
  64.       LDA $DC08           ; Get Tenth of seconds
  65.       AND #$0F
  66.       ORA #$B0
  67.       STA $0426           ; Put on screen
  68.       LDA $DC0D           ; Check ICR if interrupt 
  69.                           ;   is from the Alarm
  70.       AND #$84            ; Check bits 7 and 2
  71.       CMP #$84
  72.       BEQ ALARM           ; If both are set, sound alarm
  73.       JMP $EA31           ; Go to KERNAL IRQ routine
  74. ALARM
  75.       LDX #$10            ; Setup for Alarm (16 loops)
  76.       LDY #$00            ; Set Delay Counters
  77.       STY $02
  78.       LDA #$20            ; Set up SID chip
  79.       STA $D400           ; FREQ Lo
  80.       STA $D401           ; Freq Hi
  81.       LDA #$0F
  82.       STA $D418           ; Volume
  83.       LDA #$00
  84.       STA $D406           ; S/R
  85.       LDA #$29
  86.       STA $D405           ; A/D
  87. ALOOP1
  88.       LDA #$11            ; Main Alarm LOOP
  89.       STA $D404           ; Turn on Triangle Waveform
  90. ALOOP2
  91.       DEY                 ; Delay LOOP
  92.       BNE ALOOP2
  93.       DEC $02
  94.       BNE ALOOP2
  95.       DEC $D020           ; Decrement border color
  96.       DEC $D021           ; Decrement background color
  97.       LDA #$10            ; Turn off voice 1
  98.       STA $D404
  99.       DEX                 ; Decrement LOOP counter
  100.       BNE ALOOP1          ; If not done, do it again
  101.       PLA                 ; Restore registers from the stack
  102.       TAY 
  103.       PLA 
  104.       TAX 
  105.       PLA 
  106.       RTI                 ; Return to program
  107.